package v1

import (
	"RoccBlog/global"
	"RoccBlog/model"
	"RoccBlog/model/req_resp"
	"RoccBlog/repository"
	"RoccBlog/util"
)

// ProjectItemRepository 持久层
type ProjectItemRepository struct {
	//实现增删改查接口
	repository.BaseRepository
}

// Create 新增项目管理
func (r *ProjectItemRepository) Create(data model.ProjectItem) error {
	return global.DB.Create(&data).Error
}

// Delete 删除项目管理
func (r *ProjectItemRepository) Delete(id int, userId int) error {
	db := global.DB.Begin()

	//清除项目任务
	err := db.Model(&model.ProjectItem{Id: id}).Association("TaskProgress").Clear()
	if err != nil {
		db.Rollback()
		return err
	}

	//删除项目
	err = db.Where("create_by = ?", userId).Delete(&model.ProjectItem{}, id).Error
	if err != nil {
		db.Rollback()
		return err
	}

	//提交
	db.Commit()
	return nil
}

// Update 更新项目管理
func (r *ProjectItemRepository) Update(data model.ProjectItem, userId int) error {
	return global.DB.Model(&data).Where("create_by = ?", userId).Updates(&data).Error
}

// Select 查询项目管理
func (r *ProjectItemRepository) Select(params req_resp.ProjectItemReq, pageNum, pageSize int, userId int) (any, error) {
	var (
		//数据列表
		list []model.ProjectItem
		//统计
		count int64
		//错误
		err error
	)

	//查询来自 model.ProjectItem
	db := global.DB.Model(&model.ProjectItem{})

	//添加查询条件
	if params.Name != nil {
		// 项目名称 查询
		db = db.Where("name like ?", params.Name)
	}

	//搜索用户自有数据
	db = db.Where("create_by = ?", userId)

	//查询条数
	err = db.Count(&count).Error
	if err != nil {
		return nil, err
	}

	//分页之后查询列表
	err = db.Offset((pageNum - 1) * pageSize).Limit(pageSize).Find(&list).Error
	//转换为 util.Page
	return util.ToPageInfo(count, pageSize, pageNum, list), err
}

// SelectById 通过Id查询项目管理
func (r *ProjectItemRepository) SelectById(id int, userId int) (model.ProjectItem, error) {
	var ProjectItem model.ProjectItem
	err := global.DB.Where("create_by = ?", userId).Take(&ProjectItem, id).Error
	return ProjectItem, err
}
